#ifndef __CLIENT__
#define __CLIENT__
#include <my_header.h>
#include <termios.h>
#include <unistd.h>

#define  SEND_URL 0//服务端发送URL路径给客户端
#define  SEND_FILE_DIR 1//服务端发送指定目录信息给客户端
#define  SEND_FILE  2//向客户端发送文件
#define  SEND_TIP 3//服务端发送提示信息
#define  REGISTER_SUCESS 4//注册成功
#define  REGISTER_FAILD 5//注册失败
#define  LOGIN_SUCESS 6//登录成功
#define  LOGIN_FAILD 7//登录失败
#define  SEND_REUPLOAD 8//服务端发送是否是上传断点续传命令
enum TerminalCommand{
    CMD_CD=10,//切换目录10
    CMD_LS,//展示当前目录下的文件11
    CMD_PWD,//展示当前位置12
    CMD_PUTS,//上传文件13
    CMD_REDOWNLOAD,//客户端发送是否是下载断点续传命令14
    CMD_GETS,//下载服务器文件到本地15
    CMD_REMOVE,//删除服务器上面的文件16
    CMD_MKDIR,//创建一个文件夹17
    CMD_RMDIR,//删除一个文件空文件夹18
    CMD_HISTORY, //最近使用的命令19
    USER_REGISTER,//用户注册20
    USER_LOGIN,//用户登录21
    USER_TOKEN//用户验证22
};

typedef struct train_s{
    int type;
    int length;
    char data[4096];
}train_t;//TLV协议

typedef struct trans_train_s{                            
    int length;
    char data[4096];
}trans_train_t;//传输文件

typedef struct thread{
    char* ip;
    char* port;
    char* username;
    char* token;
    int netfd;
    train_t cmds;
}thread_t;


void help();
void get_password(char *buf, int max_element);
void show_client_files(char *path);
void *threadFunc_puts(void*arg);
void *threadFunc_gets(void*arg);

int connectTcp(char *ip,char *port);
int recvn(int sockfd, void *buf, int length);
int register_user(int sockfd, char *username, char *password);
int log_in(int sockfd, char *username, char *password);
int client_getsfile(int sockfd, const char *remote_path);
int client_putsfile(int sockfd, const char *remote_path);

#endif
